<!DOCTYPE html>
<html lang="en-us">
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    
<meta charset="UTF-8">
<title>Lucene’s Practical Scoring Function | Elasticsearch: The Definitive Guide [2.x] | Elastic</title>
<link rel="home" href="index.html" title="Elasticsearch: The Definitive Guide [2.x]">
<link rel="up" href="controlling-relevance.html" title="Controlling Relevance">
<link rel="prev" href="scoring-theory.html" title="Theory Behind Relevance Scoring">
<link rel="next" href="query-time-boosting.html" title="Query-Time Boosting">
<meta name="DC.type" content="Learn/Docs/Legacy/Elasticsearch/Definitive Guide/2.x">
<meta name="DC.subject" content="Elasticsearch">
<meta name="DC.identifier" content="2.x">
<meta name="robots" content="noindex,nofollow">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://cdn.optimizely.com/js/18132920325.js"></script>
    <link rel="apple-touch-icon" sizes="57x57" href="/apple-icon-57x57.png">
    <link rel="apple-touch-icon" sizes="60x60" href="/apple-icon-60x60.png">
    <link rel="apple-touch-icon" sizes="72x72" href="/apple-icon-72x72.png">
    <link rel="apple-touch-icon" sizes="76x76" href="/apple-icon-76x76.png">
    <link rel="apple-touch-icon" sizes="114x114" href="/apple-icon-114x114.png">
    <link rel="apple-touch-icon" sizes="120x120" href="/apple-icon-120x120.png">
    <link rel="apple-touch-icon" sizes="144x144" href="/apple-icon-144x144.png">
    <link rel="apple-touch-icon" sizes="152x152" href="/apple-icon-152x152.png">
    <link rel="apple-touch-icon" sizes="180x180" href="/apple-icon-180x180.png">
    <link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32">
    <link rel="icon" type="image/png" href="/android-chrome-192x192.png" sizes="192x192">
    <link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">
    <link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16">
    <link rel="manifest" href="/manifest.json">
    <meta name="apple-mobile-web-app-title" content="Elastic">
    <meta name="application-name" content="Elastic">
    <meta name="msapplication-TileColor" content="#ffffff">
    <meta name="msapplication-TileImage" content="/mstile-144x144.png">
    <meta name="theme-color" content="#ffffff">
    <meta name="naver-site-verification" content="936882c1853b701b3cef3721758d80535413dbfd">
    <meta name="yandex-verification" content="d8a47e95d0972434">
    <meta name="localized" content="true">
    <meta name="st:robots" content="follow,index">
    <meta property="og:image" content="https://www.elastic.co/static/images/elastic-logo-200.png">
    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
    <link rel="icon" href="/favicon.ico" type="image/x-icon">
    <link rel="apple-touch-icon-precomposed" sizes="64x64" href="/favicon_64x64_16bit.png">
    <link rel="apple-touch-icon-precomposed" sizes="32x32" href="/favicon_32x32.png">
    <link rel="apple-touch-icon-precomposed" sizes="16x16" href="/favicon_16x16.png">
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    <link rel="stylesheet" type="text/css" href="/guide/static/styles.css">
  </head>

  <!--© 2015-2021 Elasticsearch B.V. Copying, publishing and/or distributing without written permission is strictly prohibited.-->

  <body>
    <!-- Google Tag Manager -->
    <script>dataLayer = [];</script><noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-58RLH5" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-58RLH5');</script>
    <!-- End Google Tag Manager -->

    <!-- Global site tag (gtag.js) - Google Analytics -->
    <script async src="https://www.googletagmanager.com/gtag/js?id=UA-12395217-16"></script>
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());
      gtag('config', 'UA-12395217-16');
    </script>

    <!--BEGIN QUALTRICS WEBSITE FEEDBACK SNIPPET-->
    <script type="text/javascript">
      (function(){var g=function(e,h,f,g){
      this.get=function(a){for(var a=a+"=",c=document.cookie.split(";"),b=0,e=c.length;b<e;b++){for(var d=c[b];" "==d.charAt(0);)d=d.substring(1,d.length);if(0==d.indexOf(a))return d.substring(a.length,d.length)}return null};
      this.set=function(a,c){var b="",b=new Date;b.setTime(b.getTime()+6048E5);b="; expires="+b.toGMTString();document.cookie=a+"="+c+b+"; path=/; "};
      this.check=function(){var a=this.get(f);if(a)a=a.split(":");else if(100!=e)"v"==h&&(e=Math.random()>=e/100?0:100),a=[h,e,0],this.set(f,a.join(":"));else return!0;var c=a[1];if(100==c)return!0;switch(a[0]){case "v":return!1;case "r":return c=a[2]%Math.floor(100/c),a[2]++,this.set(f,a.join(":")),!c}return!0};
      this.go=function(){if(this.check()){var a=document.createElement("script");a.type="text/javascript";a.src=g;document.body&&document.body.appendChild(a)}};
      this.start=function(){var a=this;window.addEventListener?window.addEventListener("load",function(){a.go()},!1):window.attachEvent&&window.attachEvent("onload",function(){a.go()})}};
      try{(new g(100,"r","QSI_S_ZN_emkP0oSe9Qrn7kF","https://znemkp0ose9qrn7kf-elastic.siteintercept.qualtrics.com/WRSiteInterceptEngine/?Q_ZID=ZN_emkP0oSe9Qrn7kF")).start()}catch(i){}})();
    </script><div id="ZN_emkP0oSe9Qrn7kF"><!--DO NOT REMOVE-CONTENTS PLACED HERE--></div>
    <!--END WEBSITE FEEDBACK SNIPPET-->

    <div id="elastic-nav" style="display:none;"></div>
    <script src="https://www.elastic.co/elastic-nav.js"></script>

    <!-- Subnav -->
    <div>
      <div>
        <div class="tertiary-nav d-none d-md-block">
          <div class="container">
            <div class="p-t-b-15 d-flex justify-content-between nav-container">
              <div class="breadcrum-wrapper"><span><a href="/guide/" style="font-size: 14px; font-weight: 600; color: #000;">Docs</a></span></div>
            </div>
          </div>
        </div>
      </div>
    </div>

    <div class="main-container">
      <section id="content">
        <div class="content-wrapper">

          <section id="guide" lang="en">
            <div class="container">
              <div class="row">
                <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                  <!-- start body -->
                  <div class="page_header">
<p>
  <strong>WARNING</strong>: The 2.x versions of Elasticsearch have passed their
  <a href="https://www.elastic.co/support/eol">EOL dates</a>. If you are running
  a 2.x version, we strongly advise you to upgrade.
</p>
<p>
  This documentation is no longer maintained and may be removed. For the latest
  information, see the <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html">current
  Elasticsearch documentation</a>.
</p>
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch: The Definitive Guide [2.x]</a></span>
»
<span class="breadcrumb-link"><a href="search-in-depth.html">Search in Depth</a></span>
»
<span class="breadcrumb-link"><a href="controlling-relevance.html">Controlling Relevance</a></span>
»
<span class="breadcrumb-node">Lucene’s Practical Scoring Function</span>
</div>
<div class="navheader">
<span class="prev">
<a href="scoring-theory.html">« Theory Behind Relevance Scoring</a>
</span>
<span class="next">
<a href="query-time-boosting.html">Query-Time Boosting »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="practical-scoring-function"></a>Lucene’s Practical Scoring Function<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch-definitive-guide/edit/2.x/170_Relevance/15_Practical_scoring.asciidoc">edit</a>
</h2>
</div></div></div>
<p>For multiterm queries, Lucene takes the <a class="xref" href="scoring-theory.html#boolean-model" title="Boolean Model">Boolean model</a>,
<a class="xref" href="scoring-theory.html#tfidf" title="Term Frequency/Inverse Document Frequency (TF/IDF)">TF/IDF</a>, and the <a class="xref" href="scoring-theory.html#vector-space-model" title="Vector Space Model">vector space model</a> and
combines  them in a single efficient package that collects matching
documents and scores them as it goes.</p>
<p>A multiterm query like</p>
<div class="pre_wrapper lang-json">
<pre class="programlisting prettyprint lang-json">GET /my_index/doc/_search
{
  "query": {
    "match": {
      "text": "quick fox"
    }
  }
}</pre>
</div>
<p>is rewritten internally to look like this:</p>
<div class="pre_wrapper lang-json">
<pre class="programlisting prettyprint lang-json">GET /my_index/doc/_search
{
  "query": {
    "bool": {
      "should": [
        {"term": { "text": "quick" }},
        {"term": { "text": "fox"   }}
      ]
    }
  }
}</pre>
</div>
<p>The <code class="literal">bool</code> query implements the Boolean model and, in this example, will
include only documents that contain either the term <code class="literal">quick</code> or the term <code class="literal">fox</code> or
both.</p>
<p>As soon as a document matches a query, Lucene calculates its score for that
query, combining the scores of each matching term.  The formula used for
scoring is called the <em>practical scoring function</em>. It looks intimidating, but
don’t be put off—​most of the components you already know. It introduces a
few new elements that we discuss next.</p>
<pre class="literallayout">score(q,d)  =  <a id="CO107-1"></a><i class="conum" data-value="1"></i>
            queryNorm(q)  <a id="CO107-2"></a><i class="conum" data-value="2"></i>
          · coord(q,d)    <a id="CO107-3"></a><i class="conum" data-value="3"></i>
          · ∑ (           <a id="CO107-4"></a><i class="conum" data-value="4"></i>
                tf(t in d)   <a id="CO107-5"></a><i class="conum" data-value="5"></i>
              · idf(t)²      <a id="CO107-6"></a><i class="conum" data-value="6"></i>
              · t.getBoost() <a id="CO107-7"></a><i class="conum" data-value="7"></i>
              · norm(t,d)    <a id="CO107-8"></a><i class="conum" data-value="8"></i>
            ) (t in q)    <a id="CO107-9"></a><i class="conum" data-value="4"></i></pre>

<div class="calloutlist">
<table border="0" summary="Callout list">
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO107-1"><i class="conum" data-value="1"></i></a></p>
</td>
<td align="left" valign="top">
<p><code class="literal">score(q,d)</code> is the relevance score of document <code class="literal">d</code> for query <code class="literal">q</code>.</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO107-2"><i class="conum" data-value="2"></i></a></p>
</td>
<td align="left" valign="top">
<p><code class="literal">queryNorm(q)</code> is the <a class="xref" href="practical-scoring-function.html#query-norm" title="Query Normalization Factor"><em>query normalization</em> factor</a> (new).</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO107-3"><i class="conum" data-value="3"></i></a></p>
</td>
<td align="left" valign="top">
<p><code class="literal">coord(q,d)</code> is the <a class="xref" href="practical-scoring-function.html#coord" title="Query Coordination"><em>coordination</em> factor</a> (new).</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO107-4"><i class="conum" data-value="4"></i></a><a href="#CO107-9"></a></p>
</td>
<td align="left" valign="top">
<p>The sum of the weights for each term <code class="literal">t</code> in the query <code class="literal">q</code> for document <code class="literal">d</code>.</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO107-5"><i class="conum" data-value="5"></i></a></p>
</td>
<td align="left" valign="top">
<p><code class="literal">tf(t in d)</code> is the <a class="xref" href="scoring-theory.html#tf" title="Term frequency">term frequency</a> for term <code class="literal">t</code> in document <code class="literal">d</code>.</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO107-6"><i class="conum" data-value="6"></i></a></p>
</td>
<td align="left" valign="top">
<p><code class="literal">idf(t)</code> is the <a class="xref" href="scoring-theory.html#idf" title="Inverse document frequency">inverse document frequency</a> for term <code class="literal">t</code>.</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO107-7"><i class="conum" data-value="7"></i></a></p>
</td>
<td align="left" valign="top">
<p><code class="literal">t.getBoost()</code> is the <a class="xref" href="query-time-boosting.html" title="Query-Time Boosting"><em>boost</em></a>  that has been
applied to the query (new).</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO107-8"><i class="conum" data-value="8"></i></a></p>
</td>
<td align="left" valign="top">
<p><code class="literal">norm(t,d)</code> is the <a class="xref" href="scoring-theory.html#field-norm" title="Field-length norm">field-length norm</a>, combined with the
<a class="xref" href="practical-scoring-function.html#index-boost" title="Index-Time Field-Level Boosting">index-time field-level boost</a>, if any. (new).</p>
</td>
</tr>
</table>
</div>
<p>You should recognize <code class="literal">score</code>, <code class="literal">tf</code>, and <code class="literal">idf</code>. The  <code class="literal">queryNorm</code>, <code class="literal">coord</code>,
<code class="literal">t.getBoost</code>, and <code class="literal">norm</code> are new.</p>
<p>We will talk more about <a class="xref" href="query-time-boosting.html" title="Query-Time Boosting">query-time boosting</a>  later in
this chapter, but first let’s get query normalization, coordination, and
index-time field-level boosting out of the way.</p>
<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="query-norm"></a>Query Normalization Factor<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch-definitive-guide/edit/2.x/170_Relevance/15_Practical_scoring.asciidoc">edit</a>
</h3>
</div></div></div>
<p>The <em>query normalization factor</em> (<code class="literal">queryNorm</code>) is an attempt to <em>normalize</em> a
query so that the results from one query may be compared with the results of
another.</p>
<div class="tip admon">
<div class="icon"></div>
<div class="admon_content">
<p>Even though the intent of the query norm is to make results from different
queries comparable, it doesn’t work very well. The only purpose of
the relevance <code class="literal">_score</code> is to sort the results of the current query in the
correct order. You should not try to compare the relevance scores from
different queries.</p>
</div>
</div>
<p>This factor is calculated at the beginning of the query. The actual
calculation depends on the queries involved, but a typical implementation is as follows:</p>
<pre class="literallayout">queryNorm = 1 / √sumOfSquaredWeights <a id="CO108-1"></a><i class="conum" data-value="1"></i></pre>

<div class="calloutlist">
<table border="0" summary="Callout list">
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO108-1"><i class="conum" data-value="1"></i></a></p>
</td>
<td align="left" valign="top">
<p>The <code class="literal">sumOfSquaredWeights</code> is calculated by adding together the IDF of each
term in the query, squared.</p>
</td>
</tr>
</table>
</div>
<div class="tip admon">
<div class="icon"></div>
<div class="admon_content">
<p>The same query normalization factor is applied to every document, and you
have no way of changing it. For all intents and purposes, it can be ignored.</p>
</div>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="coord"></a>Query Coordination<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch-definitive-guide/edit/2.x/170_Relevance/15_Practical_scoring.asciidoc">edit</a>
</h3>
</div></div></div>
<p>The <em>coordination factor</em> (<code class="literal">coord</code>) is used to reward documents that contain a
higher percentage of the query terms. The more query terms that appear in
the document, the greater the chances that the document is a good match for
the query.</p>
<p>Imagine that we have a query for <code class="literal">quick brown fox</code>, and that the
weight for each term is 1.5.  Without the coordination factor, the score would
just be the sum of the weights of the terms in a document. For instance:</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
Document with <code class="literal">fox</code> → score: 1.5
</li>
<li class="listitem">
Document with <code class="literal">quick fox</code> → score: 3.0
</li>
<li class="listitem">
Document with <code class="literal">quick brown fox</code> → score: 4.5
</li>
</ul>
</div>
<p>The coordination factor multiplies the score by the number of matching terms
in the document, and divides it by the total number of terms in the query.
With the coordination factor, the scores would be as follows:</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
Document with <code class="literal">fox</code> → score: <code class="literal">1.5 * 1 / 3</code> = 0.5
</li>
<li class="listitem">
Document with <code class="literal">quick fox</code> → score: <code class="literal">3.0 * 2 / 3</code> = 2.0
</li>
<li class="listitem">
Document with <code class="literal">quick brown fox</code> → score: <code class="literal">4.5 * 3 / 3</code> = 4.5
</li>
</ul>
</div>
<p>The coordination factor results in the document that contains all three terms
being much more relevant than the document that contains just two of them.</p>
<p>Remember that the query for <code class="literal">quick brown fox</code> is rewritten into a <code class="literal">bool</code> query
like this:</p>
<div class="pre_wrapper lang-json">
<pre class="programlisting prettyprint lang-json">GET /_search
{
  "query": {
    "bool": {
      "should": [
        { "term": { "text": "quick" }},
        { "term": { "text": "brown" }},
        { "term": { "text": "fox"   }}
      ]
    }
  }
}</pre>
</div>
<p>The <code class="literal">bool</code> query uses query coordination by default for all <code class="literal">should</code> clauses,
but it does allow you to disable coordination.  Why might you want to do this?
Well, usually the answer is, you don’t.  Query coordination is usually a good
thing.  When you use a <code class="literal">bool</code> query to wrap several high-level queries like
the <code class="literal">match</code> query, it also makes sense to leave coordination enabled. The more
clauses that match, the higher the degree of overlap between your search
request and the documents that are returned.</p>
<p>However, in some advanced use cases, it might make sense to disable
coordination.  Imagine that you are looking for the synonyms <code class="literal">jump</code>, <code class="literal">leap</code>, and
<code class="literal">hop</code>.  You don’t care how many of these synonyms are present, as they all
represent the same concept. In fact, only one of the synonyms is likely to be
present.  This would be a good case for disabling the coordination factor:</p>
<div class="pre_wrapper lang-json">
<pre class="programlisting prettyprint lang-json">GET /_search
{
  "query": {
    "bool": {
      "disable_coord": true,
      "should": [
        { "term": { "text": "jump" }},
        { "term": { "text": "hop"  }},
        { "term": { "text": "leap" }}
      ]
    }
  }
}</pre>
</div>
<p>When you use synonyms (see <a class="xref" href="synonyms.html" title="Synonyms"><em>Synonyms</em></a>), this is exactly what
happens internally: the rewritten query disables coordination for the
synonyms.   Most use cases for disabling coordination are handled
automatically; you don’t need to worry about it.</p>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="index-boost"></a>Index-Time Field-Level Boosting<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch-definitive-guide/edit/2.x/170_Relevance/15_Practical_scoring.asciidoc">edit</a>
</h3>
</div></div></div>
<p>We will talk about <em>boosting</em> a field—​making it more important than other
fields—​at query time in <a class="xref" href="query-time-boosting.html" title="Query-Time Boosting">Query-Time Boosting</a>.  It is also possible
to apply a boost to a field at index time.  Actually, this boost is applied to
every term in the field, rather than to the field itself.</p>
<p>To store this boost value in the index without using more space
than necessary, this field-level index-time boost is combined with the field-length norm (see  <a class="xref" href="scoring-theory.html#field-norm" title="Field-length norm">Field-length norm</a>) and stored in the index as a single byte.
This is the value returned by <code class="literal">norm(t,d)</code> in the preceding formula.</p>
<div class="warning admon">
<div class="icon"></div>
<div class="admon_content">
<p>We strongly recommend against using field-level index-time boosts for a few
reasons:</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
Combining the boost with the field-length norm and storing it in a single
byte means that the field-length norm loses precision. The result is that
Elasticsearch is unable to distinguish between a field containing three words
and a field containing five words.
</li>
<li class="listitem">
To change an index-time boost, you have to reindex all your documents.
A query-time boost, on the other hand, can be changed with every query.
</li>
<li class="listitem">
If a field with an index-time boost has multiple values, the boost is
multiplied by itself for every value, dramatically increasing
the weight for that field.
</li>
</ul>
</div>
<p><a class="xref" href="query-time-boosting.html" title="Query-Time Boosting">Query-time boosting</a> is a much simpler, cleaner, more
flexible option.</p>
</div>
</div>
<p>With query normalization, coordination, and index-time boosting out of the way,
we can now move on to the most useful tool for influencing the relevance
calculation: query-time boosting.</p>
</div>

</div>
<div class="navfooter">
<span class="prev">
<a href="scoring-theory.html">« Theory Behind Relevance Scoring</a>
</span>
<span class="next">
<a href="query-time-boosting.html">Query-Time Boosting »</a>
</span>
</div>
</div>

                  <!-- end body -->
                </div>
                <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                  <div id="rtpcontainer" style="display: block;">
                    <div class="mktg-promo">
                      <h3>Most Popular</h3>
                      <ul class="icons">
                        <li class="icon-elasticsearch-white"><a href="https://www.elastic.co/webinars/getting-started-elasticsearch?baymax=default&amp;elektra=docs&amp;storm=top-video">Get Started with Elasticsearch: Video</a></li>
                        <li class="icon-kibana-white"><a href="https://www.elastic.co/webinars/getting-started-kibana?baymax=default&amp;elektra=docs&amp;storm=top-video">Intro to Kibana: Video</a></li>
                        <li class="icon-logstash-white"><a href="https://www.elastic.co/webinars/introduction-elk-stack?baymax=default&amp;elektra=docs&amp;storm=top-video">ELK for Logs &amp; Metrics: Video</a></li>
                      </ul>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </section>

        </div>


<div id="elastic-footer"></div>
<script src="https://www.elastic.co/elastic-footer.js"></script>
<!-- Footer Section end-->

      </section>
    </div>

<script src="/guide/static/jquery.js"></script>
<script type="text/javascript" src="/guide/static/docs.js"></script>
<script type="text/javascript">
  window.initial_state = {}</script>
  </body>
</html>
